Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.02.2018, 12:24
Аспирант
Отправить личное сообщение для olegalimov Посмотреть профиль Найти все сообщения от olegalimov
 
Регистрация: 27.09.2015
Сообщений: 94

Как отправить из Ajax одну переменную и получить ответ в Ajax виде массива?
Доброе время суток.
Подскажите, как отправить из Ajax одну переменную а именно имя домена и получить ответ в Ajax виде массива который должен с генерировать таблицу с данными от сервера.
вот форма
<form method="post">
<table>
<tr><td>Домен:</td><td><input id="out_domain" type="text" name="domain" value="juntik.ru"></td></tr>
</table>
<div class="button_records"><input type="submit" name="getRrRecords" value="Получить записи"></div>
</form>

ajax
$('[name="getRrRecords"]').click(function(){
//		e.preventDefault();
		ajaxGetRrRecords();
	});
	function ajaxGetRrRecords(){
		var domain = $('#out_domain').val();
		$.ajax({
			type: "POST",
			cache: false,
			url: "getrerecords.php",
			data:{domain:domain}, // Передаем обработчику имя домена
			dataType: "json",
			success: function(data){
				alert( "Прибыли данные: " + data );
			console.log(data);
			}
		});
	}

Обработчик php
<?
//ini_set('display_errors',1);
if(isset($_POST['domain']))
	{
		include '../reg/soap_action_getrrrecords.php'; //Подключение по API к SOAP-сервер
		try	{
				//вызываем функцию получения списка RR записей подомену
				$getrrrecord = $client->getRrRecords($_POST['domain']);
			}
		catch (SoapFault $fault)
			{
				//Неудалось вызвать функциюget RrRecords на сервере или она отработала неправильно.
				echo '<div class="forma"><b>Невозможно выполнить функцию четения записи DNS</b></div>';
				//echo $format1."Couldntexecute getRrRecords".$format2;
				//echo "Fault code: ".$fault->faultcode."<br>Fault message: ".$fault->faultstring;
				logout();
				exit();
			}
		if ($getrrrecord->status->code != '1')
			{
				//функция отработала, возникла обработанная ошибка с идентификатором $getrrrecord->status->name,выдаем сообщение.
				echo '<div class="forma"><b>Не удалось получить записи DNS</b></div>';
				echo '<div class="error_messages"><form action="../index.php"><button class="button" type="submit">Главная</button></form></div>';
				//echo $format1."Failed to getRRrecords".$format2;
				//echo "Error name:".$getrrrecord->status->name."<br>Error message:".$getrrrecord->status->message;
				logout();
				exit();
			}
		else
			{
	/*			//Успешно получили список записей с SOAP-сервера.
				echo "<form><table class='info'><tr><td><h1>Существующие записи в доменном имени <span class='dell_name'>$namedomain.</span></h1></td></tr><tr><td><table class='info_2'><tr><td>N</td><td>ID</td><td class='owner'>Имя записи</td><td>Действие</td><td>Тип записи</td><td>Приоритет</td><td>Вес</td>
				<td>Порт</td><td>Значение</td><!--td>Алгоритм</td><td>Приведение типа</td><td>Комментарий</td--></tr>";
				foreach($getrrrecord->data as $key =>$record)
					{
Это было в php							echo"<tr><td>".($key+1)."</td>
						<td class='id'>".$record->id."</td>
						<td class='owner'>".$record->owner."</td>
						<td><button title='Удалить' id='".$record->id."' class='delete_btn'><img src='../images/delete_2.png' alt='Удаление' style='vertical-align:middle'> Удалить</button></td>
		<td class='type_record'>".$record->type_record."</td>
						<td class='pri'>".$record->pri."</td>
						<td class='weight'>".$record->weight."</td>
						<td class='port'>".$record->port."</td>
						<td class='td_value'>".$record->data."</td>
						<!--td class='sshfp_algorithm'>".$record->sshfp_algorithm."</td>
						<td class='sshfp_type'>".$record->sshfp_type."</td>
						<td class='info_rec'>".$record->info."</td--></tr>";
					}
						echo '</table></td></tr></table></form>';
	*/
				$response = [];
				foreach($getrrrecord->data as $key =>$record)
					array_push($response, [
					'n' => ($key+1),
					'id' => $record->id,
					'owner' => $record->owner,
					'type_record' => $record->type_record,
					'pri' => $record->pri,
					'weight' => $record->weight,
					'port' => $record->port,
					'data' => $record->data
				]);
				echo json_encode($response);
			}
	}
?>

Ошибка в коде обработчика, файл не грузится 500 internal server
Подскажите в чем у меня ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 02.02.2018, 12:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

dataType: "json"
и
echo '<div class="forma">Не удалось получить записи DNS</b></div>';

уже не правильно.

http://php.net/manual/ru/language.exceptions.php

Последний раз редактировалось laimas, 02.02.2018 в 12:46.
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2018, 13:07
Аспирант
Отправить личное сообщение для olegalimov Посмотреть профиль Найти все сообщения от olegalimov
 
Регистрация: 27.09.2015
Сообщений: 94

Сообщение от laimas Посмотреть сообщение
dataType: "json"
и
echo '<div class="forma">Не удалось получить записи DNS</b></div>';
Хорошо echo Я все отключил, но причем dataType: "json",
Он же принимает с обработчика массив в формате json
Я так понимаю.
Ответить с цитированием
  #4 (permalink)  
Старый 02.02.2018, 13:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если отбросить в сторону обработку исключений, которую вы не понимаете и что у вас написано, это полный швах, то ваш диалог сервер-клиент кроме ошибок на клиенте при ошибках на сервере ничего не дает.

dataType: "json" - это не принимает, это определяет сценарию, что данные от сервера будут в формате JSON. Поэтому, приняв их, клиент будет их декодировать.

Но при возникновении ошибок на сервере вы отдаете не JSON, а HTML. Вопрос - что при этом будет на клиенте, который будет пытаться декодировать HTML как JSON?
Ответить с цитированием
  #5 (permalink)  
Старый 02.02.2018, 13:58
Аспирант
Отправить личное сообщение для olegalimov Посмотреть профиль Найти все сообщения от olegalimov
 
Регистрация: 27.09.2015
Сообщений: 94

Сообщение от laimas Посмотреть сообщение
диалог сервер-клиент кроме ошибок на клиенте при ошибках на сервере ничего не дает.
Если обработчик написать так
<?
//ini_set('display_errors',1);
if(isset($_POST['domain']))
	{
		include '../reg/soap_action_getrrrecords.php'; //Подключение по API к SOAP-сервер
	
				//вызываем функцию получения списка RR записей подомену
				$getrrrecord = $client->getRrRecords($_POST['domain']);
	
				$response = [];
				foreach($getrrrecord->data as $key =>$record)
					array_push($response, [
					'n' => ($key+1),
					'id' => $record->id,
					'owner' => $record->owner,
					'type_record' => $record->type_record,
					'pri' => $record->pri,
					'weight' => $record->weight,
					'port' => $record->port,
					'data' => $record->data
				]);
				echo json_encode($response);
			}
	}
?>
Ответить с цитированием
  #6 (permalink)  
Старый 02.02.2018, 14:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,279

Сообщение от olegalimov
как отправить из Ajax одну переменную а именно имя домена и получить ответ в Ajax виде массива
Нужно "бить" ПХПистов их же оружием!

Вот тебе пример на CSP.

Файл tmp.csp

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	$('form').submit(function(){
		var domain = $('#out_domain').val();
		$.ajax({
			type: "POST",
			cache: false,
			url: "tmp1.csp",
			data: {domain: domain}, 
			success: function(data){
				alert( "Прибыли данные: " + data );
			}
		});
		return false;
	});
});
</script>
</head>
<body>
<form method="post">
	<table>
		<tr>
			<td>Домен:</td>
			<td>
				<input id="out_domain" type="text" name="domain" value="juntik.ru">
			</td>
		</tr>
	</table>
	<div class="button_records">
		<input type="submit" name="getRrRecords" value="Получить записи" />
	</div>
</form>
</body>
</html>


Файл tmp1.csp

[
<script language='cache' runat='server'>
	s str="Первый,Второй,Третий,Четвертый"
	s dlm=""
	for i=1:1:$l(str,",") {
		&html<#(dlm)#"#($p(str,",",i))#">
		s dlm=","
	}
</script>
]
Ответить с цитированием
  #7 (permalink)  
Старый 02.02.2018, 14:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от ksa
Нужно "бить" ПХПистов их же оружием!

Вот тебе пример на CSP.
Если не знать языка, то и на Бейсике можно ляпов наделать.
Ответить с цитированием
  #8 (permalink)  
Старый 02.02.2018, 14:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от olegalimov
Если обработчик написать так
А если вывести на экран без всякого Ajax, то что возвращает SOAP ($getrrrecord), можно будет получить ответ нужен ли вообще цикл?
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2018, 15:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,279

Сообщение от laimas
Если не знать языка
Дело в том, что ПХПисты постоянно выкладывают свои коды, как будто это тот самый Бейсик, который всем понятен.

Вместо ХТМЛ-примера, выкладывают свои программки, которые его как-то формируют...
Ответить с цитированием
  #10 (permalink)  
Старый 02.02.2018, 15:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от ksa
Дело в том, что ПХПисты постоянно выкладывают свои коды
Ну так у него проблемы как раз с серверным кодом связаны. Это когда вместо html необходимого вываливают код сервера, тогда да, хуже некуда. )
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать одну переменную к другой? webgame Общие вопросы Javascript 12 12.02.2016 04:32
как правильно получить ответ аяксом imediasun1 Элементы интерфейса 5 04.03.2014 15:57
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Функция для перевода размера из байтов в понятный для человека формат Антон Крамолов Ваши сайты и скрипты 4 05.04.2013 16:42
Как получить максимальное и минимальное допустимое число в не экспоненциальном виде? FINoM Общие вопросы Javascript 17 25.02.2011 14:48